﻿// 10148. 「一本通 5.1 例 2」能量项链.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

/*
https://loj.ac/p/10148

题目描述
原题来自：NOIP 2006

在 Mars 星球上，每个 Mars 人都随身佩带着一串能量项链。在项链上有 N 颗能量珠。
能量珠是一颗有头标记和尾标记的珠子，这些标记对应着某个正整数。并且，对于相邻的两颗珠子，前一颗珠子的尾标记必定等于后一颗珠子的头标记。
因为只有这样，通过吸盘——Mars 人吸收能量的器官的作用，这两颗珠子才能聚合成一颗珠子，同时释放出可被吸盘吸收的能量。
如果一颗能量珠头标记为 m，尾标记为 r，后一颗能量珠头标记为 r，尾标记为 n，则聚合后释放出 m * r * n Mars单位的能量，
新珠子头标记为 m，尾标记为 n。

当需要时，Mars 人就用吸盘夹住相邻的两颗珠子，通过聚合得到能量，直到项链上只剩下一颗珠子为止。显然，不同的聚合顺序得到的总能量是不一样的。
请设计一个聚合顺序使得一串珠子聚合后释放出的总能量最大。

例如，设 N=4，四颗珠子头标记与尾标记分别为 (2,3),(3,5),(5,10),(10,2)。
我们用记号  X 表示两颗珠子的聚合操作，(j X k) 表示 j,k 两颗珠子聚合后释放出的能量，则4,1两颗珠子聚合后所释放的能量为(4 X 1)=10 * 2 * 3=60，
这一串项链可以得到最优值的一个聚合顺序所释放出的总能量为(((4 X 1) X 2) X 3)= 10 * 2 * 3+10 * 3 * 5+10 * 5 * 10=710

现在给你一串项链，项链上有 n 颗珠子，相邻两颗珠子可以合并成一个，合并同时会放出一定的能量，不同珠子合并放出能量不相同，请问按怎样的次序合并才能使得释放的能量最多？

输入格式
第一行一个正整数 n

第二行 n 个不超过 1000 的正整数，第 i(1 <= i  <= n) 个数为第 i 颗珠子的头标记，
当 i\neq n 时第 i 颗珠子的尾标记等于第 i+1 颗珠子的头标记，
当 i=n 时第 i 颗珠子的尾标记等于第 1 颗珠子的头标记。

至于珠子的顺序，你可以这样确定：将项链放在桌面上，不要出现交叉，随机指定一颗珠子为第一颗珠子，按顺时针确定其它珠子的顺序。

输出格式
输出只有一行，一个不超过 2.1 * 10^9 的正整数，表示最优聚合顺序所释放的能量。

4
2 3 5 10

710

数据范围与提示
对于 100\% 的数据，4 <= n  <= 100。
*/
int main()
{
    std::cout << "Hello World!\n";
}

 